package com.pro.dl.dao.service;

import java.util.List;

import com.pro.dl.exception.AlreadyPresentObject;
import com.pro.dl.exception.StorageException;
import com.pro.dl.pojo.profile.InputField;
import com.pro.dl.pojo.profile.PersonType;
import com.pro.dl.pojo.profile.Profile;
import com.pro.dl.pojo.profile.ProfileData;
import com.pro.dl.pojo.profile.ProfileTemplate;

public interface ProfileDao  {

	/** Create methods 
	 * @throws AlreadyPresentObject **/
	public void createAPersonType(PersonType personType) throws StorageException;
	
	public void createProfile(Profile profile) throws StorageException;

	public void createInputField(InputField field)  throws StorageException;

	public void createProfileTemplate(ProfileTemplate profileTemplate) throws StorageException;

	public void updateValue(ProfileData profileData) throws StorageException;

	public void updateValue(List<ProfileData> profileDatas) throws StorageException;
	
	public void createPersonType(PersonType personType) throws StorageException, AlreadyPresentObject;

	/**
	 * Update method
	 */
	
	public void updateProfileTemplate(ProfileTemplate profileTemplate) throws StorageException;
	
	/** Get Method 
	 * @throws StorageException **/
	
	
	public Profile getProfile(long profileId) throws StorageException;
	
	public ProfileTemplate getProfileTemplate(long profileTemplateId) throws StorageException;
	
	public List<ProfileTemplate> getProfileTemplates(long prolfileId) throws StorageException;
	
	public List<InputField> getInputFields(long profileTemplateId) throws StorageException;
	
	public List<ProfileData> getProfileData(long personId) throws StorageException;
	
	public List<ProfileData> getProfileData(long personId, long profileTemplateId) throws StorageException;
	
	public List<ProfileData> getProfileData(long personId, long profileTemplateId, long inputFieldId) throws StorageException;
	
	
	
	
}
